DynamoDB তে ডেটা অনুসন্ধান (retrieve) করার জন্য দুটি প্রধান অপারেশন রয়েছে: Query এবং Scan। এগুলি ডেটার মধ্যে তথ্য বের করার জন্য ব্যবহৃত হয়, তবে তাদের কার্যকারিতা এবং কার্যকলাপে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে।
১. Query অপারেশন
Query অপারেশন DynamoDB তে একটি নির্দিষ্ট টেবিল বা ইনডেক্স থেকে ডেটা সিলেক্ট করার জন্য ব্যবহৃত হয়, যেখানে আপনি Primary Key (Partition Key বা Partition Key + Sort Key) ব্যবহার করে নির্দিষ্ট আইটেম খুঁজে পান।
Query এর বৈশিষ্ট্য:
- Primary Key বা Secondary Index ব্যবহার করে ডেটা অনুসন্ধান করা হয়।
- Efficient: Query অপারেশন খুবই দ্রুত এবং পারফরম্যান্সের দিক থেকে আরও কার্যকরী, কারণ এটি ডেটাবেসের পার্টিশন বা ইনডেক্স ব্যবহার করে নির্দিষ্ট ডেটা খুঁজে বের করে।
- Filter Expressions: আপনি ফিল্টার এক্সপ্রেশন ব্যবহার করে ফলাফল আরও সুনির্দিষ্ট করতে পারেন, তবে এটি Query এর দক্ষতা কিছুটা কমাতে পারে।
- Return Specific Items: Query অপারেশন শুধুমাত্র নির্দিষ্ট আইটেম বা রেঞ্জ রিটার্ন করে।
Query ব্যবহার করার উদাহরণ:
ধরা যাক, আপনার একটি Users টেবিল রয়েছে, এবং আপনি একটি নির্দিষ্ট UserID এর সকল তথ্য বের করতে চান। এটি করার জন্য আপনি Query অপারেশন ব্যবহার করবেন, যেটি UserID এর ভিত্তিতে ডেটা ফিরিয়ে দেবে।
import boto3
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Users')
response = table.query(
KeyConditionExpression=Key('UserID').eq('12345')
)
items = response['Items']
print(items)
২. Scan অপারেশন
Scan অপারেশন সম্পূর্ণ টেবিল বা ইনডেক্সের মধ্যে ডেটা অনুসন্ধান করে। এটি একটি ব্রুট-ফোর্স পদ্ধতি, যেখানে প্রতিটি আইটেম স্ক্যান করে ফলাফল তৈরি করা হয়।
Scan এর বৈশিষ্ট্য:
- Full Table Scan: Scan অপারেশন টেবিলের সমস্ত আইটেম স্ক্যান করে এবং সমস্ত ডেটা প্রক্রিয়া করে।
- Slower: Query এর তুলনায় Scan অপারেশন সাধারণত ধীরগতির হয়, কারণ এটি পুরো টেবিল বা ইনডেক্সের মধ্যে একে একে সব আইটেম পরীক্ষা করে।
- Filter Expressions: আপনি Scan অপারেশনে ফিল্টার এক্সপ্রেশন ব্যবহার করতে পারেন, যা স্ক্যানের পর ফলাফলকে ফিল্টার করবে, তবে এটি সম্পূর্ণ টেবিল স্ক্যানের প্রভাব ফেলবে।
- No Primary Key Constraint: Scan অপারেশন Primary Key ব্যবহার না করলেও কাজ করে, তাই এটি আরও সাধারণভাবে ব্যবহার করা যায়, তবে পারফরম্যান্স কমে যেতে পারে।
Scan ব্যবহার করার উদাহরণ:
ধরা যাক, আপনি আপনার Users টেবিল থেকে সকল ব্যবহারকারীর নাম বের করতে চান যারা নির্দিষ্ট শহরে বাস করে। এটি করার জন্য আপনি Scan অপারেশন ব্যবহার করবেন:
import boto3
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Users')
response = table.scan(
FilterExpression=Attr('City').eq('Dhaka')
)
items = response['Items']
print(items)
Query এবং Scan এর মধ্যে পার্থক্য:
| Feature | Query | Scan |
|---|---|---|
| Speed | Faster (Efficient, works with Primary Key/Index) | Slower (Scans entire table) |
| Data Retrieval | Retrieves data based on a specific condition (Primary Key or Index) | Scans all items and filters results based on conditions |
| Use Case | Ideal for looking up a specific item or a range of items | Used for less specific or full-table searches |
| Capacity Usage | Consumes fewer read capacity units (RCU) | Consumes more read capacity units (RCU) |
| Filtering | Filtering possible after Query, but efficient | Filtering can be applied, but less efficient due to full scan |
| Performance | More efficient for large datasets | Less efficient, especially with large datasets |
কখন Query এবং Scan ব্যবহার করবেন?
- Query ব্যবহার করুন যখন আপনি নির্দিষ্ট Primary Key অথবা Secondary Index এর মাধ্যমে ডেটা অনুসন্ধান করতে চান এবং দ্রুত ফলাফল চান।
- Scan ব্যবহার করুন যখন আপনি টেবিলের পুরো ডেটা বা কোনো বিশেষ ক্ষেত্রের মধ্যে খোঁজ করতে চান, কিন্তু যদি আপনি বড় টেবিলের মধ্যে কাজ করছেন, তবে এটি কম কার্যকর হতে পারে।
Read more